<!DOCTYPE html>
<html lang=zh>
<head>
    <meta charset="utf-8">
    
    <title>LErry</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <meta name="description" content="记录生活点滴">
<meta property="og:type" content="website">
<meta property="og:title" content="LErry">
<meta property="og:url" content="https://www.itchina.top/page/7/index.html">
<meta property="og:site_name" content="LErry">
<meta property="og:description" content="记录生活点滴">
<meta property="og:locale" content="zh-CN">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="LErry">
<meta name="twitter:description" content="记录生活点滴">
    

    
        <link rel="alternate" href="/atom.xml" title="LErry" type="application/atom+xml" />
    

    
        <link rel="icon" href="/css/images/shortcut_icon.png" />
    

    <link rel="stylesheet" href="/libs/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="/libs/open-sans/styles.css">
    <link rel="stylesheet" href="/libs/source-code-pro/styles.css">

    <link rel="stylesheet" href="/css/style.css">

    <script src="/libs/jquery/2.1.3/jquery.min.js"></script>
    
    
        <link rel="stylesheet" href="/libs/lightgallery/css/lightgallery.min.css">
    
    
        <link rel="stylesheet" href="/libs/justified-gallery/justifiedGallery.min.css">
    
    
    
    


</head>

<body>
    <div id="container">
        <header id="header">
    <div id="header-main" class="header-inner">
        <div class="outer">
            <a href="/" id="logo">
                <i class="logo"></i>
                <span class="site-title">LErry</span>
            </a>
            <nav id="main-nav">
                
                    <a class="main-nav-link" href="/.">主页</a>
                
                    <a class="main-nav-link" href="/freebooks">书籍</a>
                
                    <a class="main-nav-link" href="/tags">标签</a>
                
                    <a class="main-nav-link" href="/archives">归档</a>
                
                    <a class="main-nav-link" href="/aboutme">关于</a>
                
            </nav>
            
                
                <nav id="sub-nav">
                    <div class="profile" id="profile-nav">
                        <a id="profile-anchor" href="javascript:;">
                            <img class="avatar" src="/css/images/avatar.png" />
                            <i class="fa fa-caret-down"></i>
                        </a>
                    </div>
                </nav>
            
            <div id="search-form-wrap">

    <form class="search-form">
        <input type="text" class="ins-search-input search-form-input" placeholder="搜索" />
        <button type="submit" class="search-form-submit"></button>
    </form>
    <div class="ins-search">
    <div class="ins-search-mask"></div>
    <div class="ins-search-container">
        <div class="ins-input-wrapper">
            <input type="text" class="ins-search-input" placeholder="想要查找什么..." />
            <span class="ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
        </div>
        <div class="ins-section-wrapper">
            <div class="ins-section-container"></div>
        </div>
    </div>
</div>
<script>
(function (window) {
    var INSIGHT_CONFIG = {
        TRANSLATION: {
            POSTS: '文章',
            PAGES: '页面',
            CATEGORIES: '分类',
            TAGS: '标签',
            UNTITLED: '(未命名)',
        },
        ROOT_URL: '/',
        CONTENT_URL: '/content.json',
    };
    window.INSIGHT_CONFIG = INSIGHT_CONFIG;
})(window);
</script>
<script src="/js/insight.js"></script>

</div>
        </div>
    </div>
    <div id="main-nav-mobile" class="header-sub header-inner">
        <table class="menu outer">
            <tr>
                
                    <td><a class="main-nav-link" href="/.">主页</a></td>
                
                    <td><a class="main-nav-link" href="/freebooks">书籍</a></td>
                
                    <td><a class="main-nav-link" href="/tags">标签</a></td>
                
                    <td><a class="main-nav-link" href="/archives">归档</a></td>
                
                    <td><a class="main-nav-link" href="/aboutme">关于</a></td>
                
                <td>
                    
    <div class="search-form">
        <input type="text" class="ins-search-input search-form-input" placeholder="搜索" />
    </div>

                </td>
            </tr>
        </table>
    </div>
</header>

        <div class="outer">
            
                

<aside id="profile">
    <div class="inner profile-inner">
        <div class="base-info profile-block">
            <img id="avatar" src="/css/images/avatar.png" />
            <h2 id="name">LErry Li</h2>
            <h3 id="title">知我者谓我心忧，不知我者谓我何求</h3>
            <span id="location"><i class="fa fa-map-marker"></i>Shanghai, China</span>
            <a id="follow" target="_blank" href="https://github.com/lerry903">关注我</a>
        </div>
        <div class="article-info profile-block">
            <div class="article-info-block">
                65
                <span>文章</span>
            </div>
            <div class="article-info-block">
                54
                <span>标签</span>
            </div>
        </div>
        
        <div class="profile-block social-links">
            <table>
                <tr>
                    
                    
                    <td>
                        <a href="https://github.com/lerry903" target="_blank" title="github" class=tooltip>
                            <i class="fa fa-github"></i>
                        </a>
                    </td>
                    
                    <td>
                        <a href="mailto:lerryli@foxmail.com" target="_blank" title="envelope" class=tooltip>
                            <i class="fa fa-envelope"></i>
                        </a>
                    </td>
                    
                    <td>
                        <a href="http://wpa.qq.com/msgrd?v=3&uin=824444270&site=qq&menu=yes" target="_blank" title="qq" class=tooltip>
                            <i class="fa fa-qq"></i>
                        </a>
                    </td>
                    
                    <td>
                        <a href="https://weibo.com/5941010376" target="_blank" title="weibo" class=tooltip>
                            <i class="fa fa-weibo"></i>
                        </a>
                    </td>
                    
                    <td>
                        <a href="/atom.xml" target="_blank" title="rss" class=tooltip>
                            <i class="fa fa-rss"></i>
                        </a>
                    </td>
                    
                </tr>
            </table>
        </div>
        
    </div>
</aside>

            
            <section id="main">
    <article id="post-GeneratedValue注解" class="article article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
        
        
            <header class="article-header">
                
    
        <h1 itemprop="name">
            <a class="article-title" href="/2018/04/20/GeneratedValue注解/">GeneratedValue注解</a>
        </h1>
    

                
                    <div class="article-meta">
                        
    <div class="article-date">
        <i class="fa fa-calendar"></i>
        <a href="/2018/04/20/GeneratedValue注解/">
            <time datetime="2018-04-19T16:34:21.406Z" itemprop="datePublished">2018-04-20</time>
        </a>
    </div>


                        
    <div class="article-category">
    	<i class="fa fa-folder"></i>
        <a class="article-category-link" href="/categories/Spring/">Spring</a>
    </div>

                        
                    </div>
                
            </header>
        
        
        <div class="article-entry" itemprop="articleBody">
        
            
            <p>一、JPA通用策略生成器<br>通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id,<br>其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法,<br>JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出.  </p>
<pre><code>1     @Target({METHOD,FIELD})    
2         @Retention(RUNTIME)    
3         public @interface GeneratedValue{    
4             GenerationType strategy() default AUTO;    
5             String generator() default &quot;&quot;;    
6         }   
</code></pre><p>其中GenerationType:</p>
<pre><code>1     public enum GenerationType{    
2         TABLE,    
3         SEQUENCE,    
4         IDENTITY,    
5         AUTO   
6     }  
</code></pre><p>JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.<br>TABLE：使用一个特定的数据库表格来保存主键。<br>SEQUENCE：根据底层数据库的序列来生成主键，条件是数据库支持序列。<br>IDENTITY：主键由数据库自动生成（主要是自动增长型）<br>AUTO：主键由程序控制。  </p>
<p>1、TABLE</p>
<pre><code>1     @Id  
2     @GeneratedValue(strategy = GenerationType.TABLE, generator=&quot;payablemoney_gen&quot;)  
3     @TableGenerator(name = &quot;pk_gen&quot;,  
4         table=&quot;tb_generator&quot;,  
5         pkColumnName=&quot;gen_name&quot;,  
6         valueColumnName=&quot;gen_value&quot;,  
7         pkColumnValue=&quot;PAYABLEMOENY_PK&quot;,  
8         allocationSize=1  
9     )  
</code></pre><p>这里应用表tb_generator，定义为</p>
<pre><code>1     CREATE TABLE  tb_generator (  
2       id NUMBER NOT NULL,  
3       gen_name VARCHAR2(255) NOT NULL,  
4       gen_value NUMBER NOT NULL,  
5       PRIMARY KEY(id)  
6     )  
</code></pre><p>插入纪录，供生成主键使用，</p>
<pre><code>1     INSERT INTO tb_generator(id, gen_name, gen_value) VALUES (1,PAYABLEMOENY_PK&apos;, 1);  
</code></pre><p>在主键生成后，这条纪录的value值，按allocationSize递增。  </p>
<p>@TableGenerator的定义：</p>
<pre><code> 1     @Target({TYPE, METHOD, FIELD})   
 2     @Retention(RUNTIME)  
 3     public @interface TableGenerator {  
 4       String name();  
 5       String table() default &quot;&quot;;  
 6       String catalog() default &quot;&quot;;  
 7       String schema() default &quot;&quot;;  
 8       String pkColumnName() default &quot;&quot;;  
 9       String valueColumnName() default &quot;&quot;;  
10       String pkColumnValue() default &quot;&quot;;  
11       int initialValue() default 0;  
12       int allocationSize() default 50;  
13       UniqueConstraint[] uniqueConstraints() default {};  
14     }  
</code></pre><p>其中属性说明：<br>name属性表示该表主键生成策略的名称，它被引用在@GeneratedValue中设置的“generator”值中。<br>table属性表示表生成策略所持久化的表名，例如，这里表使用的是数据库中的“tb_generator”。<br>catalog属性和schema具体指定表所在的目录名或是数据库名。<br>pkColumnName属性的值表示在持久化表中，该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值<br>valueColumnName属性的值表示在持久化表中，该主键当前所生成的值，它的值将会随着每次创建累加。例如，在“tb_generator”中将“gen_<br>value”作为主键的值<br>pkColumnValue属性的值表示在持久化表中，该生成策略所对应的主键。例如在“tb_generator”表中，将“gen_name”的值为“CUSTO<br>MER_PK”。<br>initialValue表示主键初识值，默认为0。<br>allocationSize表示每次主键值增加的大小，例如设置成1，则表示每次创建新记录后自动加1，默认为50。<br>UniqueConstraint与@Table标记中的用法类似。  </p>
<p>2、SEQUENCE</p>
<pre><code>1     @Id  
2     @GeneratedValue(strategy = GenerationType.SEQUENCE,generator=&quot;payablemoney_seq&quot;)  
3     @SequenceGenerator(name=&quot;payablemoney_seq&quot;, sequenceName=&quot;seq_payment&quot;)  
</code></pre><p>@SequenceGenerator定义</p>
<pre><code>1     @Target({TYPE, METHOD, FIELD})   
2     @Retention(RUNTIME)  
3     public @interface SequenceGenerator {  
4      String name();  
5      String sequenceName() default &quot;&quot;;  
6      int initialValue() default 0;  
7      int allocationSize() default 50;  
8     }  
</code></pre><p>name属性表示该表主键生成策略的名称，它被引用在@GeneratedValue中设置的“generator”值中。<br>sequenceName属性表示生成策略用到的数据库序列名称。<br>initialValue表示主键初识值，默认为0。<br>allocationSize表示每次主键值增加的大小，例如设置成1，则表示每次创建新记录后自动加1，默认为50。  </p>
<p>3、IDENTITY</p>
<pre><code>1     @Id  
2     @GeneratedValue(strategy = GenerationType.IDENTITY)  
</code></pre><p>4、AUTO</p>
<pre><code>1     @Id  
2     @GeneratedValue(strategy = GenerationType.AUTO)  
</code></pre><p>在指定主键时，如果不指定主键生成策略，默认为AUTO。</p>
<pre><code>1     @Id  
</code></pre><p>跟下面的定义是一样的。</p>
<pre><code>1     @Id  
2     @GeneratedValue(strategy = GenerationType.AUTO)  
</code></pre><p>二、hibernate主键策略生成器<br>hibernate提供多种主键生成策略，有点是类似于JPA，有的是hibernate特有：<br>native: 对于 oracle 采用 Sequence 方式，对于MySQL 和 SQL Server<br>采用identity（自增主键生成机制），native就是将主键的生成工作交由数据库完成，hibernate不管（很常用）。<br>uuid: 采用128位的uuid算法生成主键，uuid被编码为一个32位16进制数字的字符串。占用空间大（字符串类型）。<br>hilo: 使用hilo生成策略，要在数据库中建立一张额外的表，默认表名为hibernate_unique_key,默认字段为integer类型，名称是ne<br>xt_hi（比较少用）。<br>assigned: 在插入数据的时候主键由程序处理（很常用），这是 <generator>元素没有指定时的默认生成策略。等同于JPA中的AUTO。<br>identity: 使用SQL Server 和 MySQL 的自增字段，这个方法不能放到 Oracle 中，Oracle<br>不支持自增字段，要设定sequence（MySQL 和 SQL Server 中很常用）。 等同于JPA中的INDENTITY。<br>select: 使用触发器生成主键（主要用于早期的数据库主键生成机制，少用）。<br>sequence: 调用底层数据库的序列来生成主键，要设定序列名，不然hibernate无法找到。<br>seqhilo: 通过hilo算法实现，但是主键历史保存在Sequence中，适用于支持 Sequence 的数据库，如 Oracle（比较少用）<br>increment:<br>插入数据的时候hibernate会给主键添加一个自增的主键，但是一个hibernate实例就维护一个计数器，所以在多个实例运行的时候不能使用这个方法。<br>foreign: 使用另外一个相关联的对象的主键。通常和<one-to-one>联合起来使用。<br>guid: 采用数据库底层的guid算法机制，对应MYSQL的uuid()函数，SQL<br>Server的newid()函数，ORACLE的rawtohex(sys_guid())函数等。<br>uuid.hex: 看uuid，建议用uuid替换。<br>sequence-identity: sequence策略的扩展，采用立即检索策略来获取sequence值，需要JDBC3.0和JDK4以上（含1.4）版本<br>hibernate提供了多种生成器供选择,基于Annotation的方式通过@GenericGenerator实现.<br>hibernate每种主键生成策略提供接口org.hibernate.id.IdentifierGenerator的实现类,如果要实现自定义的主键生成策略也<br>必须实现此接口.</one-to-one></generator></p>
<pre><code> 1     public interface IdentifierGenerator {  
 2         /** 
 3          * The configuration parameter holding the entity name 
 4          */  
 5         public static final String ENTITY_NAME = &quot;entity_name&quot;;  
 6           
 7       /** 
 8        * Generate a new identifier. 
 9        * @param session 
10        * @param object the entity or toplevel collection for which the id is being generated 
11        * 
12        * @return a new identifier 
13        * @throws HibernateException 
14        */  
15       public Serializable generate(SessionImplementor session, Object object)   
16         throws HibernateException;  
17     }  
</code></pre><p>IdentifierGenerator提供一generate方法,generate方法返回产生的主键.  </p>
<p>三、@GenericGenerator<br>自定义主键生成策略，由@GenericGenerator实现。<br>hibernate在JPA的基础上进行了扩展，可以用一下方式引入hibernate独有的主键生成策略，就是通过@GenericGenerator加入的。<br>比如说，JPA标准用法</p>
<pre><code>1     @Id  
2     @GeneratedValue(GenerationType.AUTO)  
</code></pre><p>就可以用hibernate特有以下用法来实现</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;assigned&quot;)  
</code></pre><p>@GenericGenerator的定义:</p>
<pre><code> 1     @Target({PACKAGE, TYPE, METHOD, FIELD})  
 2     @Retention(RUNTIME)  
 3     public @interface GenericGenerator {  
 4      /** 
 5       * unique generator name 
 6       */  
 7      String name();  
 8      /** 
 9       * Generator strategy either a predefined Hibernate 
10       * strategy or a fully qualified class name. 
11       */  
12      String strategy();  
13      /** 
14       * Optional generator parameters 
15       */  
16      Parameter[] parameters() default {};  
17     }  
</code></pre><p>name属性指定生成器名称。<br>strategy属性指定具体生成器的类名。<br>parameters得到strategy指定的具体生成器所用到的参数。  </p>
<p>对于这些hibernate主键生成策略和各自的具体生成器之间的关系,在org.hibernate.id.IdentifierGeneratorFactory<br>中指定了,</p>
<pre><code> 1     static {  
 2       GENERATORS.put(&quot;uuid&quot;, UUIDHexGenerator.class);  
 3       GENERATORS.put(&quot;hilo&quot;, TableHiLoGenerator.class);  
 4       GENERATORS.put(&quot;assigned&quot;, Assigned.class);  
 5       GENERATORS.put(&quot;identity&quot;, IdentityGenerator.class);  
 6       GENERATORS.put(&quot;select&quot;, SelectGenerator.class);  
 7       GENERATORS.put(&quot;sequence&quot;, SequenceGenerator.class);  
 8       GENERATORS.put(&quot;seqhilo&quot;, SequenceHiLoGenerator.class);  
 9       GENERATORS.put(&quot;increment&quot;, IncrementGenerator.class);  
10       GENERATORS.put(&quot;foreign&quot;, ForeignGenerator.class);  
11       GENERATORS.put(&quot;guid&quot;, GUIDGenerator.class);  
12       GENERATORS.put(&quot;uuid.hex&quot;, UUIDHexGenerator.class); //uuid.hex is deprecated  
13       GENERATORS.put(&quot;sequence-identity&quot;, SequenceIdentityGenerator.class);  
14     }  
</code></pre><p>上面十二种策略，加上native，hibernate一共默认支持十三种生成策略。</p>
<p>1、native</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;native&quot;)   
</code></pre><p>2、uuid</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;uuid&quot;)   
</code></pre><p>3、hilo</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;hilo&quot;)   
</code></pre><p>4、assigned</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;assigned&quot;)   
</code></pre><p>5、identity</p>
<pre><code>1  @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2 @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;identity&quot;) 
</code></pre><p>6、select</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)  
2     @GenericGenerator(name=&quot;select&quot;, strategy=&quot;select&quot;,  
3          parameters = { @Parameter(name = &quot;key&quot;, value = &quot;idstoerung&quot;) })  
</code></pre><p>7、sequence</p>
<pre><code>1  @GeneratedValue(generator = &quot;paymentableGenerator&quot;)  
2 @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;sequence&quot;,   
3          parameters = { @Parameter(name = &quot;sequence&quot;, value = &quot;seq_payablemoney&quot;) }) 
</code></pre><p>8、seqhilo</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)  
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;seqhilo&quot;,   
3              parameters = { @Parameter(name = &quot;max_lo&quot;, value = &quot;5&quot;) })  
</code></pre><p>9、increment</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;increment&quot;)   
</code></pre><p>10、foreign</p>
<pre><code>1     @GeneratedValue(generator = &quot;idGenerator&quot;)  
2     @GenericGenerator(name = &quot;idGenerator&quot;, strategy = &quot;foreign&quot;,   
3              parameters = { @Parameter(name = &quot;property&quot;, value = &quot;employee&quot;) })  
</code></pre><p>注意：直接使用@PrimaryKeyJoinColumn 报错</p>
<pre><code>1     @OneToOne(cascade = CascadeType.ALL)   
2     @PrimaryKeyJoinColumn   
</code></pre><p>例如</p>
<pre><code>1     @Entity  
2     public class Employee {  
3       @Id Integer id;  
4           
5       @OneToOne @PrimaryKeyJoinColumn  
6       EmployeeInfo info;  
7       ...  
8     }  
</code></pre><p>应该为</p>
<pre><code> 1     @Entity  
 2     public class Employee {  
 3       @Id   
 4       @GeneratedValue(generator = &quot;idGenerator&quot;)  
 5       @GenericGenerator(name = &quot;idGenerator&quot;, strategy = &quot;foreign&quot;,   
 6              parameters = { @Parameter(name = &quot;property&quot;, value = &quot;info&quot;) })   
 7       Integer id;  
 8           
 9       @OneToOne  
10       EmployeeInfo info;  
11       ...  
12     }  
</code></pre><p>11、guid</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;guid&quot;)   
</code></pre><p>12、uuid.hex</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)    
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;uuid.hex&quot;)   
</code></pre><p>13、sequence-identity</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)  
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;sequence-identity&quot;,   
3              parameters = { @Parameter(name = &quot;sequence&quot;, value = &quot;seq_payablemoney&quot;) })  
</code></pre><p>四、通过@GenericGenerator自定义主键生成策略<br>如果实际应用中，主键策略为程序指定了就用程序指定的主键（assigned），没有指定就从sequence中取。<br>明显上面所讨论的策略都不满足，只好自己扩展了，集成assigned和sequence两种策略。</p>
<pre><code> 1     public class AssignedSequenceGenerator extends SequenceGenerator implements   
 2      PersistentIdentifierGenerator, Configurable {  
 3      private String entityName;  
 4         
 5      public void configure(Type type, Properties params, Dialect dialect) throws MappingException {  
 6       entityName = params.getProperty(ENTITY_NAME);  
 7       if (entityName==null) {  
 8        throw new MappingException(&quot;no entity name&quot;);  
 9       }  
10         
11       super.configure(type, params, dialect);    
12      }  
13        
14      public Serializable generate(SessionImplementor session, Object obj)   
15       throws HibernateException {  
16         
17       Serializable id = session.getEntityPersister( entityName, obj )   
18         .getIdentifier( obj, session.getEntityMode() );  
19         
20       if (id==null) {  
21        id = super.generate(session, obj);  
22       }  
23         
24       return id;  
25      }  
26     }  
</code></pre><p>实际应用中，定义同sequence。</p>
<pre><code>1     @GeneratedValue(generator = &quot;paymentableGenerator&quot;)  
2     @GenericGenerator(name = &quot;paymentableGenerator&quot;, strategy = &quot;AssignedSequenceGenerator&quot;,   
3          parameters = { @Parameter(name = &quot;sequence&quot;, value = &quot;seq_payablemoney&quot;) })  
</code></pre><p>四种数据库的支持情况如下：</p>
<p>数据库名称</p>
<p>支持的ID生成策略</p>
<p>MySql</p>
<p>GenerationType.  _ TABLE _</p>
<p>GenerationType.  _ AUTO _</p>
<p>GenerationType.  _ IDENTITY _</p>
<p>_ 不支持 _ GenerationType.  _ SEQUENCE _</p>
<p>oracle</p>
<p>strategy=  GenerationType  .  _ AUTO _</p>
<p>GenerationType.  _ SEQUENCE _</p>
<p>GenerationType.  _ TABLE _</p>
<p>_ 不支持 _ GenerationType.  _ IDENTITY _</p>
<p>postgreSQL</p>
<p>GenerationType.  _ TABLE _</p>
<p>GenerationType.  _ AUTO _</p>
<p>GenerationType.  _ IDENTITY _</p>
<p>GenerationType.  _ SEQUENCE _</p>
<p>_ 都支持 _</p>
<p>_<br>_</p>
<p>kingbase</p>
<p>GenerationType.  _ TABLE _</p>
<p>GenerationType.  _ SEQUENCE _</p>
<p>GenerationType.  _ IDENTITY _</p>
<p>GenerationType.  _ AUTO _</p>
<p>_ 都支持 _</p>

        
        </div>
        <footer class="article-footer">
            <div class="share-container">


    <div class="bdsharebuttonbox">
    <a href="#" class="bds_more" data-cmd="more">分享到：</a>
    <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a>
    <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博">新浪微博</a>
    <a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯微博</a>
    <a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网">人人网</a>
    <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信">微信</a>
</div>
<script>
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{"bdSize":16}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
</script>
<style>
    .bdshare_popup_box {
        border-radius: 4px;
        border: #e1e1e1 solid 1px;
    }
    .bdshare-button-style0-16 a,
    .bdshare-button-style0-16 .bds_more {
        padding-left: 20px;
        margin: 6px 10px 6px 0;
    }
    .bdshare_dialog_list a,
    .bdshare_popup_list a,
    .bdshare_popup_bottom a {
        font-family: 'Microsoft Yahei';
    }
    .bdshare_popup_top {
        display: none;
    }
    .bdshare_popup_bottom {
        height: auto;
        padding: 5px;
    }
</style>


</div>

            
    
        <a href="https://www.itchina.top/2018/04/20/GeneratedValue注解/#comments" id="sourceId::2018/04/20/GeneratedValue注解/" class="article-comment-link cy_cmt_count">评论</a>
    

        </footer>
    </div>
    
</article>



    <article id="post-1524155640" class="article article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
        
        
            <header class="article-header">
                
    
        <h1 itemprop="name">
            <a class="article-title" href="/2018/04/20/1524155640/">小白科普：分布式和集群</a>
        </h1>
    

                
                    <div class="article-meta">
                        
    <div class="article-date">
        <i class="fa fa-calendar"></i>
        <a href="/2018/04/20/1524155640/">
            <time datetime="2018-04-19T16:34:00.000Z" itemprop="datePublished">2018-04-20</time>
        </a>
    </div>


                        
    <div class="article-category">
    	<i class="fa fa-folder"></i>
        <a class="article-category-link" href="/categories/集群/">集群</a>
    </div>

                        
                    </div>
                
            </header>
        
        
        <div class="article-entry" itemprop="articleBody">
        
            
            <p>分布式</p>
<p>小明的公司有3个系统： 系统A、系统B和系统C ，这三个系统所做的业务不同，被部署在3个独立的机器上运行， 他们之间互相调用（当然是跨域网络的），<br>通力合作完成公司的业务流程。</p>
<p><img src="http://img.blog.csdn.net/20170921102845300?watermark/2/text/aHR0cDovL2Jsb2
cuY3Nkbi5uZXQvbHN5MDkwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissol
ve/70/gravity/Center" alt="">  </p>
<p><img src="" alt=""></p>
<p>将不同的业务分布在不同的地方， 这就构成了一个  分布式  的系统，现在问题来了， 系统A是整个分布式系统的“脸面”，<br>用户直接访问，用户量访问大的时候要么是速度巨慢，要么直接挂掉， 怎么办？  </p>
<p>由于系统A只有一份， 所以会引起  单点失败  。</p>
<p>集群（Cluster）</p>
<p>小明的公司不差钱，就多买几台机器吧， 小明把系统A一下子部署了好几份（例如下图的3个服务器），  每一份都是系统A的一个实例， 对外提供同样的服务<br>，这样能睡个安稳觉了，不怕其中一个坏掉了，我还有另外2个呢。</p>
<p>这3个服务器上的系统就组成了一个  集群  。</p>
<p><img src="http://img.blog.csdn.net/20170921102935381?watermark/2/text/aHR0cDovL2Jsb2
cuY3Nkbi5uZXQvbHN5MDkwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissol
ve/70/gravity/Center" alt=""> <img src="" alt=""></p>
<p>可是对用户来说，一下子出现这么系统A ，每个系统的IP地址都不一样，  到底访问哪一个？</p>
<p>如果所有人都访问服务器1.1 ，那服务器1.1 会被累死， 剩下的三个闲死，成了浪费钱的摆设。</p>
<p>3  负载均衡（Load Balancer）</p>
<p>小明要尽可能的让3个机器上的系统A 工作均衡一些， 比如有3万个请求，那就让3个服务器各处理1万个（当然，这是理想状况）， 这叫  负载均衡  。  </p>
<p>很明显，这个  负载均衡  的工作最好独立出来， 放到独立的服务器上 （例如Ngnix）：</p>
<p><img src="http://img.blog.csdn.net/20170921103004404?watermark/2/text/aHR0cDovL2Jsb2
cuY3Nkbi5uZXQvbHN5MDkwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissol
ve/70/gravity/Center" alt="">  </p>
<p><img src="" alt=""></p>
<p>后来小明发现， 这个负载均衡的服务器虽然工作内容很简单，就是拿到请求，分发请求，但是它还是有可能挂掉啊，  单点失败  还是会出现。  </p>
<p>没办法，只好把负载均衡也搞成一个集群， 不过和系统A的集群有两点不同：</p>
<p>1.  这个新的集群中虽然有两个机器，但我们可以用某种办法，让这个集群对外只提供一个IP地址， 也就是说  用户看到的好像只有一个机器  。</p>
<p>2.  同一时刻，我们只让一个负载均衡的机器工作， 另外一个原地待命  。 如果工作的那个挂掉了，待命的那个就顶上去。</p>
<p><img src="" alt=""> <img src="http://img.blog.csdn.net/20170921103034623?watermark/2/text/aHR0cDov
L2Jsb2cuY3Nkbi5uZXQvbHN5MDkwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/
dissolve/70/gravity/Center" alt=""></p>
<p>4  弹性</p>
<p>如果这3个系统A的实例还是满足不了大量的请求，那就再加服务器！</p>
<p>双11来了，用户量是平时的10倍， 小明向领导申请费用又买了几十台服务器，一下子把系统A部署了几十份。  可是双11过后，<br>流量一下子降下来了，那几十个服务器用不上了，也变成了摆设！</p>
<p>被领导批评以后，小明决定尝试一下云计算，  在云端可以轻松的创建、删除虚拟的服务器， 那样就可以轻松地随着用户的请求动态的增减服务器了。<br>双11来了就创建虚拟服务器，等到双11过去了就把不用的关掉， 省得浪费钱。</p>
<p>于是小明的系统具备了一定的  弹性  。</p>
<p>5  失效转移</p>
<p>上面的系统看起来很美好，但是做了一个不切实际的假设： 所有的服务都是无状态的。 换句话说，假设用户的两次请求直接是没有关联的。</p>
<p>但是现实是，大部分服务都是有状态的， 例如购物车。</p>
<p>用户访问系统，在服务器1.1上创建了一个购物车，并向其中加入了几个商品， 然后 服务器1.1 挂掉了， 用户的后续访问就找不到服务器1.1了，这时候就要做<br>失效转移  ，让另外几个服务器去接管、去处理用户的请求。</p>
<p>可是问题来了，在服务器1.2，1.3上有用户的购物车吗？  如果没有， 用户就会抱怨，我刚创建的购物车哪里去了？</p>
<p>还有更严重的，假设用户是在服务器1.1上登录的， 用户登录过的信息保存到了该服务器的session中， 现在这个服务器挂掉了，<br>用户的session自然也不见了，当用户被失效转移到其他服务器上的时候，其他服务器发现用户没有登录， 就把用户踢到了登录界面， 让用户再次登录！</p>
<p>状态， 状态，状态！ 用户的登录信息，购物车等都是状态信息，  处理不好状态的问题，集群的威力就大打折扣，无法完成真正的失效转移， 甚至无法使用。</p>
<p>怎么办？</p>
<p>一种办法是把状态信息在集群的各个服务器之间复制，让集群的各个服务器达成一致，  谁来干这个事情？ 只能是像Websphere,<br>Weblogic这样的应用服务器了。</p>
<p>还有一种办法， 就是把状态信息集中存储在一个地方， 让集群的各个服务器都能访问到：</p>
<p><img src="" alt=""> <img src="http://img.blog.csdn.net/20170921103055596?watermark/2/text/aHR0cDov
L2Jsb2cuY3Nkbi5uZXQvbHN5MDkwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/
dissolve/70/gravity/Center" alt=""></p>
<p>小明听说Redis 不错， 那就用Redis来保存吧 ！</p>

        
        </div>
        <footer class="article-footer">
            <div class="share-container">


    <div class="bdsharebuttonbox">
    <a href="#" class="bds_more" data-cmd="more">分享到：</a>
    <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a>
    <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博">新浪微博</a>
    <a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯微博</a>
    <a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网">人人网</a>
    <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信">微信</a>
</div>
<script>
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{"bdSize":16}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
</script>
<style>
    .bdshare_popup_box {
        border-radius: 4px;
        border: #e1e1e1 solid 1px;
    }
    .bdshare-button-style0-16 a,
    .bdshare-button-style0-16 .bds_more {
        padding-left: 20px;
        margin: 6px 10px 6px 0;
    }
    .bdshare_dialog_list a,
    .bdshare_popup_list a,
    .bdshare_popup_bottom a {
        font-family: 'Microsoft Yahei';
    }
    .bdshare_popup_top {
        display: none;
    }
    .bdshare_popup_bottom {
        height: auto;
        padding: 5px;
    }
</style>


</div>

            
    
        <a href="https://www.itchina.top/2018/04/20/1524155640/#comments" id="sourceId::2018/04/20/1524155640/" class="article-comment-link cy_cmt_count">评论</a>
    

        </footer>
    </div>
    
</article>



    <article id="post-1524155640" class="article article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
        
        
            <header class="article-header">
                
    
        <h1 itemprop="name">
            <a class="article-title" href="/2018/04/20/1524155640/">在Docker容器中运行Spring Boot应用</a>
        </h1>
    

                
                    <div class="article-meta">
                        
    <div class="article-date">
        <i class="fa fa-calendar"></i>
        <a href="/2018/04/20/1524155640/">
            <time datetime="2018-04-19T16:34:00.000Z" itemprop="datePublished">2018-04-20</time>
        </a>
    </div>


                        
    <div class="article-category">
    	<i class="fa fa-folder"></i>
        <a class="article-category-link" href="/categories/Spring/">Spring</a>
    </div>

                        
    <div class="article-tag">
        <i class="fa fa-tag"></i>
        <a class="tag-link" href="/tags/Docker/">Docker</a>, <a class="tag-link" href="/tags/spring-boo/">spring-boo</a>
    </div>

                    </div>
                
            </header>
        
        
        <div class="article-entry" itemprop="articleBody">
        
            
            <h1 id="在Docker容器中运行Spring-Boot应用"><a href="#在Docker容器中运行Spring-Boot应用" class="headerlink" title="在Docker容器中运行Spring Boot应用"></a>在Docker容器中运行Spring Boot应用</h1><p>Spring Boot简化了Spring应用的开发过程，遵循约定优先配置的原则提供了各类开箱即用（out-of-the-<br>box）的框架配置。另一方面，Spring<br>Boot还具备将代码直接构建为可执行jar包的能力，这个jar包是一个可以独立运行的部署单元。基于以上特性，现在普遍认为 <a href="http://www.infoq.com/articles/microframeworks1-spring-boot" target="_blank" rel="noopener"> Spring Boot
</a> 提供了一种快速构造 <a href="http://martinfowler.com/articles/microservices.html" target="_blank" rel="noopener"> 微服务<br>(Micro-Service) </a> 的能力。</p>
<h2 id="Docker与Spring-Boot"><a href="#Docker与Spring-Boot" class="headerlink" title="Docker与Spring Boot"></a>Docker与Spring Boot</h2><p><a href="https://www.docker.com/" target="_blank" rel="noopener"> Docker </a> 是一种Linux容器的实现，Linux容器是基于进程的轻量级资源隔离技术，每一个容器<br>对应操作系统中的一个进程，但是它又会有自己的网络空间、文件系统、PID等。Docker除了实现Linux容器，还使得容器具有“社会化”的功能，用户可以将容器<br>镜像发布在 <a href="https://hub.docker.com" target="_blank" rel="noopener"> Docker Hub </a> 与其他开发者共享、协作。安装Docker的教程请参考 <a href="https://docs.docker.com/" target="_blank" rel="noopener"> 官方文档
</a></p>
<p>Spring Boot应用通常被构建为一个可单独执行的jar包，通过 <code>java -jar ...</code><br>运行，但是框架本身并没有提供以服务形式运行在后台的方法，通常需要借助Systemd, Supervisord等进程管理工具来实现。另一方面，虽然应用运行环境<br>非常的简单，但是将他们容器化为Docker容器镜像并运行，对于自动化部署、运维都是非常有利的。</p>
<p>本文将以一个最简单的Spring<br>Boot开发的Web应用为例，讲解如何将其容器化运行。本文的重点是构建Docker镜像、运行Docker容器，关于Spring<br>Boot开发Web应用可以参考 <a href="http://tianmaying.com/tutorial/spring-
boot-intro" target="_blank" rel="noopener"> Spring Boot应用开发 </a></p>
<h2 id="构建并Spring-Boot应用"><a href="#构建并Spring-Boot应用" class="headerlink" title="构建并Spring Boot应用"></a>构建并Spring Boot应用</h2><p>在应用代码编写完成后，可以直接将其打包并运行：</p>
<ul>
<li>Maven: <code>mvn package &amp;&amp; java -jar target/spring-boot-docker-0.1.0.jar</code></li>
<li>Gradle: <code>gradle build &amp;&amp; java -jar build/libs/gs-spring-boot-docker-0.1.0.jar</code></li>
</ul>
<p>在浏览器地址栏种输入 <code>[ [ http://localhost:8080/ ](http://localhost:8080/) ]( [
http://localhost:8080/ ](http://localhost:8080/) )</code> 可以访问应用</p>
<h2 id="Dockerfile构建镜像"><a href="#Dockerfile构建镜像" class="headerlink" title="Dockerfile构建镜像"></a>Dockerfile构建镜像</h2><p>Docker提供了 <a href="https://docs.docker.com/reference/builder/" target="_blank" rel="noopener"> Dockerfile </a><br>格式的文件来构建应用镜像，现在开始创建一个Spring Boot应用的Dockerfile:</p>
<pre><code>FROM java:8
VOLUME /tmp
ADD spring-boot-docker-0.1.0.jar app.jar
RUN bash -c &apos;touch /app.jar&apos;
ENTRYPOINT [&quot;java&quot;,&quot;-Djava.security.egd=file:/dev/./urandom&quot;,&quot;-jar&quot;,&quot;/app.jar&quot;]
</code></pre><p><code>java:8</code> 是指Docker Hub上官方提供的java镜像，版本号是8也就是jdk1.8，有了这个基础镜像后，Dockerfile可以通过 <code>FROM</code> 指令直接获取它的状态——也就是在容器中 <code>java</code> 是已经安装的，接下来通过自定义的命令来运行Spring Boot应用：</p>
<ul>
<li><code>VOLUME /tmp</code> 创建/tmp目录并持久化到Docker数据文件夹，因为Spring Boot使用的内嵌Tomcat容器默认使用 <code>/tmp</code> 作为工作目录 </li>
<li><code>ADD spring-boot-docker-0.1.0.jar app.jar</code> 将应用jar包复制到 <code>/app.jar</code></li>
<li><code>ENTRYPOINT</code> 表示容器运行后默认执行的命令 </li>
</ul>
<p>Dockerfile非常的简单，编辑完成后运行docker构建镜像命令：</p>
<pre><code>docker build -t tmy/spring-boot-app .
</code></pre><p>然后运行Docker容器：</p>
<pre><code>docker run -d -p 8080:8080 --name sample-app tmy/spring-boot-app
</code></pre><p>其中 <code>-d</code> 表示后台运行容器，这也就自然地解决的Spring Boot不支持后台运行应用程序的问题。 <code>-p 8080:8080</code><br>表示将容器内部的8080端口映射到宿主机器的8080端口，这样就可以通过宿主机器直接访问应用。 <code>\--name sample-app</code><br>给容器取一个容易记住的名字方便日后管理。</p>
<h2 id="使用Maven-Gradle创建Docker镜像"><a href="#使用Maven-Gradle创建Docker镜像" class="headerlink" title="使用Maven/Gradle创建Docker镜像"></a>使用Maven/Gradle创建Docker镜像</h2><p>为了方便Java开发者创建Docker镜像，Maven/Gradle都提供了响应的插件。</p>
<h3 id="Maven"><a href="#Maven" class="headerlink" title="Maven"></a>Maven</h3><pre><code>&lt;properties&gt;
      &lt;docker.image.prefix&gt;springio&lt;/docker.image.prefix&gt;
&lt;/properties&gt;
&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;com.spotify&lt;/groupId&gt;
            &lt;artifactId&gt;docker-maven-plugin&lt;/artifactId&gt;
            &lt;version&gt;0.2.3&lt;/version&gt;
            &lt;configuration&gt;
                &lt;imageName&gt;${docker.image.prefix}/${project.artifactId}&lt;/imageName&gt;
                &lt;dockerDirectory&gt;src/main/docker&lt;/dockerDirectory&gt;
                &lt;resources&gt;
                    &lt;resource&gt;
                        &lt;targetPath&gt;/&lt;/targetPath&gt;
                        &lt;directory&gt;${project.build.directory}&lt;/directory&gt;
                        &lt;include&gt;${project.build.finalName}.jar&lt;/include&gt;
                    &lt;/resource&gt;
                &lt;/resources&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;
</code></pre><p>上述 <code>pom.xml</code> 包含了 <code>docker-maven-plugin</code> 的配置：</p>
<ul>
<li><code>imageName</code> 指定了镜像的名字 </li>
<li><code>dockerDirectory</code> 指定Dockerfile的位置 </li>
<li><code>resources</code> 是指那些需要和Dockerfile放在一起，在构建镜像时使用的文件，一般应用jar包需要纳入 </li>
</ul>
<p>经过以上配置后，运行下列命令可以在本地Docker中创建一个镜像：</p>
<pre><code>$ mvn package docker:build
</code></pre><h3 id="Gradle"><a href="#Gradle" class="headerlink" title="Gradle"></a>Gradle</h3><p>Gradle同样也有支持Docker的插件：</p>
<pre><code>buildscript {
    ...
    dependencies {
        ...
        classpath(&apos;se.transmode.gradle:gradle-docker:1.2&apos;)
    }
}

group = &apos;springio&apos;

...
apply plugin: &apos;docker&apos;

task buildDocker(type: Docker, dependsOn: build) {
  push = true
  applicationName = jar.baseName
  dockerfile = file(&apos;src/main/docker/Dockerfile&apos;)
  doFirst {
    copy {
      from jar
      into stageDir
    }
  }
}
</code></pre><p>上述配置和Maven基本类似，执行以下命令构建镜像：</p>
<pre><code>$ gradle build buildDocker
</code></pre><p>版权印为您的作品印上版权58927609</p>

        
        </div>
        <footer class="article-footer">
            <div class="share-container">


    <div class="bdsharebuttonbox">
    <a href="#" class="bds_more" data-cmd="more">分享到：</a>
    <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a>
    <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博">新浪微博</a>
    <a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯微博</a>
    <a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网">人人网</a>
    <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信">微信</a>
</div>
<script>
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{"bdSize":16}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
</script>
<style>
    .bdshare_popup_box {
        border-radius: 4px;
        border: #e1e1e1 solid 1px;
    }
    .bdshare-button-style0-16 a,
    .bdshare-button-style0-16 .bds_more {
        padding-left: 20px;
        margin: 6px 10px 6px 0;
    }
    .bdshare_dialog_list a,
    .bdshare_popup_list a,
    .bdshare_popup_bottom a {
        font-family: 'Microsoft Yahei';
    }
    .bdshare_popup_top {
        display: none;
    }
    .bdshare_popup_bottom {
        height: auto;
        padding: 5px;
    }
</style>


</div>

            
    
        <a href="https://www.itchina.top/2018/04/20/1524155640/#comments" id="sourceId::2018/04/20/1524155640/" class="article-comment-link cy_cmt_count">评论</a>
    

        </footer>
    </div>
    
</article>



    <article id="post-1522990675" class="article article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
        
        
            <header class="article-header">
                
    
        <h1 itemprop="name">
            <a class="article-title" href="/2018/04/06/1522990675/">PyCharm 服务器激活</a>
        </h1>
    

                
                    <div class="article-meta">
                        
    <div class="article-date">
        <i class="fa fa-calendar"></i>
        <a href="/2018/04/06/1522990675/">
            <time datetime="2018-04-06T04:57:55.000Z" itemprop="datePublished">2018-04-06</time>
        </a>
    </div>


                        
                        
    <div class="article-tag">
        <i class="fa fa-tag"></i>
        <a class="tag-link" href="/tags/ide/">ide</a>
    </div>

                    </div>
                
            </header>
        
        
        <div class="article-entry" itemprop="articleBody">
        
            <p><p>PyCharm 服务器激活地址<br></p>
            <p class="article-more-link">
                <a href="/2018/04/06/1522990675/#more">查看更多</a>
            </p>
        
        </div>
        <footer class="article-footer">
            <div class="share-container">


    <div class="bdsharebuttonbox">
    <a href="#" class="bds_more" data-cmd="more">分享到：</a>
    <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a>
    <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博">新浪微博</a>
    <a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯微博</a>
    <a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网">人人网</a>
    <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信">微信</a>
</div>
<script>
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{"bdSize":16}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
</script>
<style>
    .bdshare_popup_box {
        border-radius: 4px;
        border: #e1e1e1 solid 1px;
    }
    .bdshare-button-style0-16 a,
    .bdshare-button-style0-16 .bds_more {
        padding-left: 20px;
        margin: 6px 10px 6px 0;
    }
    .bdshare_dialog_list a,
    .bdshare_popup_list a,
    .bdshare_popup_bottom a {
        font-family: 'Microsoft Yahei';
    }
    .bdshare_popup_top {
        display: none;
    }
    .bdshare_popup_bottom {
        height: auto;
        padding: 5px;
    }
</style>


</div>

            
    
        <a href="https://www.itchina.top/2018/04/06/1522990675/#comments" id="sourceId::2018/04/06/1522990675/" class="article-comment-link cy_cmt_count">评论</a>
    

        </footer>
    </div>
    
</article>



    <article id="post-1522683197" class="article article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
        
        
            <header class="article-header">
                
    
        <h1 itemprop="name">
            <a class="article-title" href="/2018/04/02/1522683197/">idea服务器激活</a>
        </h1>
    

                
                    <div class="article-meta">
                        
    <div class="article-date">
        <i class="fa fa-calendar"></i>
        <a href="/2018/04/02/1522683197/">
            <time datetime="2018-04-02T15:33:17.000Z" itemprop="datePublished">2018-04-02</time>
        </a>
    </div>


                        
                        
    <div class="article-tag">
        <i class="fa fa-tag"></i>
        <a class="tag-link" href="/tags/ide/">ide</a>
    </div>

                    </div>
                
            </header>
        
        
        <div class="article-entry" itemprop="articleBody">
        
            <p><p>idea服务器激活地址<br></p>
            <p class="article-more-link">
                <a href="/2018/04/02/1522683197/#more">查看更多</a>
            </p>
        
        </div>
        <footer class="article-footer">
            <div class="share-container">


    <div class="bdsharebuttonbox">
    <a href="#" class="bds_more" data-cmd="more">分享到：</a>
    <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a>
    <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博">新浪微博</a>
    <a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯微博</a>
    <a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网">人人网</a>
    <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信">微信</a>
</div>
<script>
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{"bdSize":16}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
</script>
<style>
    .bdshare_popup_box {
        border-radius: 4px;
        border: #e1e1e1 solid 1px;
    }
    .bdshare-button-style0-16 a,
    .bdshare-button-style0-16 .bds_more {
        padding-left: 20px;
        margin: 6px 10px 6px 0;
    }
    .bdshare_dialog_list a,
    .bdshare_popup_list a,
    .bdshare_popup_bottom a {
        font-family: 'Microsoft Yahei';
    }
    .bdshare_popup_top {
        display: none;
    }
    .bdshare_popup_bottom {
        height: auto;
        padding: 5px;
    }
</style>


</div>

            
    
        <a href="https://www.itchina.top/2018/04/02/1522683197/#comments" id="sourceId::2018/04/02/1522683197/" class="article-comment-link cy_cmt_count">评论</a>
    

        </footer>
    </div>
    
</article>



    <nav id="page-nav">
        <a class="extend prev" rel="prev" href="/page/6/">&laquo; 上一页</a><a class="page-number" href="/">1</a><span class="space">&hellip;</span><a class="page-number" href="/page/5/">5</a><a class="page-number" href="/page/6/">6</a><span class="page-number current">7</span>
    </nav>
</section>
            
                
<aside id="sidebar">
   
        
    <div class="widget-wrap">
        <h3 class="widget-title">最新文章</h3>
        <div class="widget">
            <ul id="recent-post" class="no-thumbnail">
                
                    <li>
                        
                        <div class="item-inner">
                            <p class="item-category"><a class="article-category-link" href="/categories/IDE/">IDE</a></p>
                            <p class="item-title"><a href="/2018/04/20/项目相关的CVS操作/" class="title">项目相关的CVS操作</a></p>
                            <p class="item-date"><time datetime="2018-04-19T16:34:21.467Z" itemprop="datePublished">2018-04-20</time></p>
                        </div>
                    </li>
                
                    <li>
                        
                        <div class="item-inner">
                            <p class="item-category"><a class="article-category-link" href="/categories/J2EE/">J2EE</a></p>
                            <p class="item-title"><a href="/2018/04/20/图片转换PDF文件/" class="title">图片转换PDF文件</a></p>
                            <p class="item-date"><time datetime="2018-04-19T16:34:21.449Z" itemprop="datePublished">2018-04-20</time></p>
                        </div>
                    </li>
                
                    <li>
                        
                        <div class="item-inner">
                            <p class="item-category"><a class="article-category-link" href="/categories/Spring/">Spring</a></p>
                            <p class="item-title"><a href="/2018/04/20/使用 Spring Data JPA 简化 JPA 开发/" class="title">使用 Spring Data JPA 简化 JPA 开发</a></p>
                            <p class="item-date"><time datetime="2018-04-19T16:34:21.448Z" itemprop="datePublished">2018-04-20</time></p>
                        </div>
                    </li>
                
                    <li>
                        
                        <div class="item-inner">
                            <p class="item-category"></p>
                            <p class="item-title"><a href="/2018/04/20/通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法/" class="title">通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法</a></p>
                            <p class="item-date"><time datetime="2018-04-19T16:34:21.448Z" itemprop="datePublished">2018-04-20</time></p>
                        </div>
                    </li>
                
                    <li>
                        
                        <div class="item-inner">
                            <p class="item-category"></p>
                            <p class="item-title"><a href="/2018/04/20/面试感悟----一名3年工作经验的程序员应该具备的技能/" class="title">面试感悟----一名3年工作经验的程序员应该具备的技能</a></p>
                            <p class="item-date"><time datetime="2018-04-19T16:34:21.447Z" itemprop="datePublished">2018-04-20</time></p>
                        </div>
                    </li>
                
            </ul>
        </div>
    </div>

    
        
    <div class="widget-wrap">
        <h3 class="widget-title">分类</h3>
        <div class="widget">
            <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/ActiveMQ/">ActiveMQ</a><span class="category-list-count">7</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/ExtJs/">ExtJs</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Git/">Git</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">4</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/J2EE/">J2EE</a><span class="category-list-count">7</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/J2EE/Spring/">Spring</a><span class="category-list-count">1</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Redis/">Redis</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Spring/">Spring</a><span class="category-list-count">21</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/cnn图片数据处理、显示/">cnn图片数据处理、显示</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/cnn图片数据处理、显示/python数据分析/">python数据分析</a><span class="category-list-count">1</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/web前端/">web前端</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/数据库/">数据库</a><span class="category-list-count">3</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/数据库/集群/">集群</a><span class="category-list-count">1</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/集群/">集群</a><span class="category-list-count">2</span></li></ul>
        </div>
    </div>

    
        
    <div class="widget-wrap">
        <h3 class="widget-title">归档</h3>
        <div class="widget">
            <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/04/">四月 2018</a><span class="archive-list-count">65</span></li></ul>
        </div>
    </div>

    
        
    <div class="widget-wrap">
        <h3 class="widget-title">标签</h3>
        <div class="widget">
            <ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/tags/Apache/">Apache</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Docker/">Docker</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Druid/">Druid</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ImageToPDF/">ImageToPDF</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Logstash/">Logstash</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Spring-Boot/">Spring Boot</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/activemq/">activemq</a><span class="tag-list-count">7</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ajax/">ajax</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/angular/">angular</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/cas/">cas</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/docker/">docker</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/exception/">exception</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ext/">ext</a><span class="tag-list-count">3</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/extjs/">extjs</a><span class="tag-list-count">3</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/find/">find</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/git/">git</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/github/">github</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ide/">ide</a><span class="tag-list-count">2</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/idea/">idea</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/java/">java</a><span class="tag-list-count">5</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/javascript/">javascript</a><span class="tag-list-count">2</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/jboss/">jboss</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/jmx/">jmx</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/jpa/">jpa</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/linux/">linux</a><span class="tag-list-count">3</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/lombok/">lombok</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mvc/">mvc</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mybatis/">mybatis</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mysql/">mysql</a><span class="tag-list-count">2</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/nginx/">nginx</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/numpy/">numpy</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/seo/">seo</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/server/">server</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/shiro/">shiro</a><span class="tag-list-count">2</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/spring/">spring</a><span class="tag-list-count">17</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/spring-mvc/">spring mvc</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/spring-boo/">spring-boo</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sql-server/">sql server</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/windows/">windows</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/zookeeper/">zookeeper</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/优化/">优化</a><span class="tag-list-count">2</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/分布式日志/">分布式日志</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/多线程/">多线程</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/工作/">工作</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/异常/">异常</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/异常处理/">异常处理</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/搜索引擎/">搜索引擎</a><span class="tag-list-count">2</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/数据分析/">数据分析</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/汉字转拼音/">汉字转拼音</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/版本控制系统/">版本控制系统</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/程序员/">程序员</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/经验/">经验</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/集群/">集群</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/面试/">面试</a><span class="tag-list-count">1</span></li></ul>
        </div>
    </div>

    
        
    <div class="widget-wrap">
        <h3 class="widget-title">标签云</h3>
        <div class="widget tagcloud">
            <a href="/tags/Apache/" style="font-size: 10px;">Apache</a> <a href="/tags/Docker/" style="font-size: 10px;">Docker</a> <a href="/tags/Druid/" style="font-size: 10px;">Druid</a> <a href="/tags/ImageToPDF/" style="font-size: 10px;">ImageToPDF</a> <a href="/tags/Logstash/" style="font-size: 10px;">Logstash</a> <a href="/tags/Spring-Boot/" style="font-size: 10px;">Spring Boot</a> <a href="/tags/activemq/" style="font-size: 18px;">activemq</a> <a href="/tags/ajax/" style="font-size: 10px;">ajax</a> <a href="/tags/angular/" style="font-size: 10px;">angular</a> <a href="/tags/cas/" style="font-size: 10px;">cas</a> <a href="/tags/docker/" style="font-size: 10px;">docker</a> <a href="/tags/exception/" style="font-size: 10px;">exception</a> <a href="/tags/ext/" style="font-size: 14px;">ext</a> <a href="/tags/extjs/" style="font-size: 14px;">extjs</a> <a href="/tags/find/" style="font-size: 10px;">find</a> <a href="/tags/git/" style="font-size: 10px;">git</a> <a href="/tags/github/" style="font-size: 10px;">github</a> <a href="/tags/ide/" style="font-size: 12px;">ide</a> <a href="/tags/idea/" style="font-size: 10px;">idea</a> <a href="/tags/java/" style="font-size: 16px;">java</a> <a href="/tags/javascript/" style="font-size: 12px;">javascript</a> <a href="/tags/jboss/" style="font-size: 10px;">jboss</a> <a href="/tags/jmx/" style="font-size: 10px;">jmx</a> <a href="/tags/jpa/" style="font-size: 10px;">jpa</a> <a href="/tags/linux/" style="font-size: 14px;">linux</a> <a href="/tags/lombok/" style="font-size: 10px;">lombok</a> <a href="/tags/mvc/" style="font-size: 10px;">mvc</a> <a href="/tags/mybatis/" style="font-size: 10px;">mybatis</a> <a href="/tags/mysql/" style="font-size: 12px;">mysql</a> <a href="/tags/nginx/" style="font-size: 10px;">nginx</a> <a href="/tags/numpy/" style="font-size: 10px;">numpy</a> <a href="/tags/seo/" style="font-size: 10px;">seo</a> <a href="/tags/server/" style="font-size: 10px;">server</a> <a href="/tags/shiro/" style="font-size: 12px;">shiro</a> <a href="/tags/spring/" style="font-size: 20px;">spring</a> <a href="/tags/spring-mvc/" style="font-size: 10px;">spring mvc</a> <a href="/tags/spring-boo/" style="font-size: 10px;">spring-boo</a> <a href="/tags/sql-server/" style="font-size: 10px;">sql server</a> <a href="/tags/windows/" style="font-size: 10px;">windows</a> <a href="/tags/zookeeper/" style="font-size: 10px;">zookeeper</a> <a href="/tags/优化/" style="font-size: 12px;">优化</a> <a href="/tags/分布式日志/" style="font-size: 10px;">分布式日志</a> <a href="/tags/多线程/" style="font-size: 10px;">多线程</a> <a href="/tags/工作/" style="font-size: 10px;">工作</a> <a href="/tags/异常/" style="font-size: 10px;">异常</a> <a href="/tags/异常处理/" style="font-size: 10px;">异常处理</a> <a href="/tags/搜索引擎/" style="font-size: 12px;">搜索引擎</a> <a href="/tags/数据分析/" style="font-size: 10px;">数据分析</a> <a href="/tags/汉字转拼音/" style="font-size: 10px;">汉字转拼音</a> <a href="/tags/版本控制系统/" style="font-size: 10px;">版本控制系统</a> <a href="/tags/程序员/" style="font-size: 10px;">程序员</a> <a href="/tags/经验/" style="font-size: 10px;">经验</a> <a href="/tags/集群/" style="font-size: 10px;">集群</a> <a href="/tags/面试/" style="font-size: 10px;">面试</a>
        </div>
    </div>

    
        
    <div class="widget-wrap widget-list">
        <h3 class="widget-title">链接</h3>
        <div class="widget">
            <ul>
                
                    <li>
                        <a href="http://www.baidu.com">百度</a>
                    </li>
                
            </ul>
        </div>
    </div>


    
    <div id="toTop" class="fa fa-angle-up"></div>
</aside>

            
        </div>
        <!--google 底部广告 -->
<div style="width:100%;text-align: center;clear: both;margin-bottom: 20px;" class="hidden-xs">
    <script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- 博客footer上方的广告 -->
    <ins class="adsbygoogle"
         style="display:block"
         data-ad-client="ca-pub-8254913025324557"
         data-ad-slot="3369473724"
         data-ad-format="auto"></ins>
    <script>
        (adsbygoogle = window.adsbygoogle || []).push({});
    </script>
</div>
<footer id="footer">
    <div class="outer">
        <div id="footer-info" class="inner">
            &copy;2018 - 2018&nbsp; LErry Li &nbsp;版权所有<br>
			<a href="http://www.miitbeian.gov.cn">沪ICP备17054498号-3</a>
        </div>
    </div>
</footer>
        
    
    <script id="cy_cmt_num" src="https://changyan.sohu.com/upload/plugins/plugins.list.count.js?clientId=cytxPSIHr"></script>
    <script charset="utf-8" type="text/javascript" src="https://changyan.sohu.com/upload/changyan.js" ></script>
    <script type="text/javascript">
    window.changyan.api.config({
    appid: 'cytxPSIHr',
    conf: 'prod_3c92d05d8ba4377e48c5fe27c2159761'
    });
    </script>




    
        <script src="/libs/lightgallery/js/lightgallery.min.js"></script>
        <script src="/libs/lightgallery/js/lg-thumbnail.min.js"></script>
        <script src="/libs/lightgallery/js/lg-pager.min.js"></script>
        <script src="/libs/lightgallery/js/lg-autoplay.min.js"></script>
        <script src="/libs/lightgallery/js/lg-fullscreen.min.js"></script>
        <script src="/libs/lightgallery/js/lg-zoom.min.js"></script>
        <script src="/libs/lightgallery/js/lg-hash.min.js"></script>
        <script src="/libs/lightgallery/js/lg-share.min.js"></script>
        <script src="/libs/lightgallery/js/lg-video.min.js"></script>
    
    
        <script src="/libs/justified-gallery/jquery.justifiedGallery.min.js"></script>
    
    



<!-- Custom Scripts -->
<script src="/js/main.js"></script>

    </div>
</body>
</html>